/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package contable.presentacion;

import contable.aplicacion.FactoriaSQL;
import contable.aplicacion.contabilidad.inventario.Compras;
import contable.aplicacion.contabilidad.inventario.ComprasContado;
import contable.aplicacion.contabilidad.inventario.ComprasCredito;
import contable.aplicacion.contabilidad.inventario.Ventas;
import contable.aplicacion.contabilidad.inventario.VentasContado;
import contable.aplicacion.contabilidad.inventario.VentasCredito;
import contable.dominio.Cuenta;
import contable.dominio.Inventario;
import javax.swing.JOptionPane;

/**
 *
 * @author jaime
 */
public class RegistrarMercaderia extends javax.swing.JFrame {

    private javax.swing.JFrame parent;
    private javax.swing.table.DefaultTableModel tabla;
    private FactoriaSQL fsql;
    private Ventas venta;
    private Compras compra;
    private boolean egreso;

    /**
     * Creates new form RegistrarMercaderia
     */
    public RegistrarMercaderia(javax.swing.JFrame parent, boolean egreso) {
        this.egreso = egreso;
        initComponents();
        setLocationRelativeTo(parent);
        this.parent = parent;
        this.parent.setVisible(false);
        fsql = FactoriaSQL.getINSTANCIA();
        tabVentas.getColumn(1).setPreferredWidth(200);
        tabla = (javax.swing.table.DefaultTableModel) tabVentas.getModel();
    }

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        productos = new javax.swing.JComboBox();
        jScrollPane2 = new javax.swing.JScrollPane();
        tabVentas = new org.jdesktop.swingx.JXTable();
        jPanel1 = new javax.swing.JPanel();
        btnAgregar = new javax.swing.JButton();
        btnEliminar = new javax.swing.JButton();
        btnRegistrar = new javax.swing.JButton();
        btnCancelar = new javax.swing.JButton();
        jPanel2 = new javax.swing.JPanel();
        txtSubtotal = new javax.swing.JTextField();
        txtIVA = new javax.swing.JTextField();
        txtTotal = new javax.swing.JTextField();
        chbCredito = new javax.swing.JCheckBox();
        ftfPago = new javax.swing.JFormattedTextField();
        jPanel3 = new javax.swing.JPanel();
        lblSubtotal = new javax.swing.JLabel();
        filler2 = new javax.swing.Box.Filler(new java.awt.Dimension(100, 1), new java.awt.Dimension(100, 1), new java.awt.Dimension(32767, 5));
        filler1 = new javax.swing.Box.Filler(new java.awt.Dimension(0, 0), new java.awt.Dimension(34, 0), new java.awt.Dimension(32767, 0));
        lblIVA = new javax.swing.JLabel();
        filler3 = new javax.swing.Box.Filler(new java.awt.Dimension(100, 1), new java.awt.Dimension(100, 1), new java.awt.Dimension(32767, 5));
        filler6 = new javax.swing.Box.Filler(new java.awt.Dimension(0, 0), new java.awt.Dimension(20, 0), new java.awt.Dimension(32767, 0));
        lblTotal = new javax.swing.JLabel();
        filler4 = new javax.swing.Box.Filler(new java.awt.Dimension(100, 5), new java.awt.Dimension(100, 25), new java.awt.Dimension(32767, 5));
        filler7 = new javax.swing.Box.Filler(new java.awt.Dimension(0, 0), new java.awt.Dimension(20, 0), new java.awt.Dimension(32767, 0));
        lblPago = new javax.swing.JLabel();
        filler5 = new javax.swing.Box.Filler(new java.awt.Dimension(100, 5), new java.awt.Dimension(100, 5), new java.awt.Dimension(32767, 5));

        FormListener formListener = new FormListener();

        productos.setModel(new javax.swing.DefaultComboBoxModel(egreso ? new String[]{"Fotografía", "Cámara", "Memoría USB 2Gb", "Memoría USB 4Gb", "Memoría USB 8Gb", "Memoría USB 16Gb", "Estuche para cámara", "Marco para fotografía", "Promoción", "Descuento"} : new String[]{"Papel fotográfico", "Tintas", "Empaque", "Cámara", "Memoría USB 2Gb", "Memoría USB 4Gb", "Memoría USB 8Gb", "Memoría USB 16Gb", "Estuche para cámara", "Marco para fotografía", "Artículos de escritorio", "Muebles y equipo de oficina", "Muebles y equipo de ventas", "Repuestos y accesorios", "Flete"}));
        productos.setName("productos"); // NOI18N
        productos.addItemListener(formListener);
        productos.addActionListener(formListener);

        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
        setTitle("Registrar " + (egreso ? "venta" : "compra") + " al " + (chbCredito.isSelected() ? "credito" : "contado"));

        jScrollPane2.setName("jScrollPane2"); // NOI18N

        tabVentas.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {

            },
            new String [] {
                "Cantidad", "Descripción", "Precio unitario"
            }
        ) {
            Class[] types = new Class [] {
                java.lang.Integer.class, java.lang.String.class, java.lang.Double.class
            };
            boolean[] canEdit = new boolean [] {
                true, true, !egreso
            };

            public Class getColumnClass(int columnIndex) {
                return types [columnIndex];
            }

            public boolean isCellEditable(int rowIndex, int columnIndex) {
                return canEdit [columnIndex];
            }
        });
        tabVentas.setName("tabVentas"); // NOI18N
        tabVentas.setSortsOnUpdates(false);
        jScrollPane2.setViewportView(tabVentas);
        tabVentas.getColumnModel().getColumn(1).setCellEditor(new javax.swing.DefaultCellEditor(productos));

        jPanel1.setName("jPanel1"); // NOI18N

        btnAgregar.setText("Agregar");
        btnAgregar.setName("btnAgregar"); // NOI18N
        btnAgregar.addMouseListener(formListener);
        jPanel1.add(btnAgregar);

        btnEliminar.setText("Eliminar");
        btnEliminar.setName("btnEliminar"); // NOI18N
        btnEliminar.addMouseListener(formListener);
        jPanel1.add(btnEliminar);

        btnRegistrar.setText("Registrar");
        btnRegistrar.setName("btnRegistrar"); // NOI18N
        btnRegistrar.addMouseListener(formListener);
        jPanel1.add(btnRegistrar);

        btnCancelar.setText("Cancelar");
        btnCancelar.setName("btnCancelar"); // NOI18N
        btnCancelar.addMouseListener(formListener);
        jPanel1.add(btnCancelar);

        jPanel2.setName("jPanel2"); // NOI18N

        txtSubtotal.setEditable(false);
        txtSubtotal.setHorizontalAlignment(javax.swing.JTextField.RIGHT);
        txtSubtotal.setText("0.00");
        txtSubtotal.setName("txtSubtotal"); // NOI18N
        txtSubtotal.setPreferredSize(new java.awt.Dimension(100, 19));
        jPanel2.add(txtSubtotal);

        txtIVA.setEditable(false);
        txtIVA.setHorizontalAlignment(javax.swing.JTextField.RIGHT);
        txtIVA.setText("0.00");
        txtIVA.setName("txtIVA"); // NOI18N
        txtIVA.setPreferredSize(new java.awt.Dimension(100, 19));
        jPanel2.add(txtIVA);

        txtTotal.setEditable(false);
        txtTotal.setHorizontalAlignment(javax.swing.JTextField.RIGHT);
        txtTotal.setText("0.00");
        txtTotal.setName("txtTotal"); // NOI18N
        txtTotal.setPreferredSize(new java.awt.Dimension(100, 19));
        jPanel2.add(txtTotal);

        chbCredito.setText("Credito");
        chbCredito.setName("chbCredito"); // NOI18N
        chbCredito.setPreferredSize(new java.awt.Dimension(100, 23));
        chbCredito.addItemListener(formListener);
        jPanel2.add(chbCredito);

        ftfPago.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(new javax.swing.text.NumberFormatter(new java.text.DecimalFormat("#0.00"))));
        ftfPago.setHorizontalAlignment(javax.swing.JTextField.RIGHT);
        ftfPago.setName("ftfPago"); // NOI18N
        ftfPago.setPreferredSize(new java.awt.Dimension(100, 19));
        ftfPago.setVisible(egreso);
        jPanel2.add(ftfPago);

        jPanel3.setName("jPanel3"); // NOI18N

        lblSubtotal.setText("Subtotal:");
        lblSubtotal.setName("lblSubtotal"); // NOI18N
        jPanel3.add(lblSubtotal);

        filler2.setName("filler2"); // NOI18N
        jPanel3.add(filler2);

        filler1.setName("filler1"); // NOI18N
        jPanel3.add(filler1);

        lblIVA.setText("IVA:");
        lblIVA.setName("lblIVA"); // NOI18N
        jPanel3.add(lblIVA);

        filler3.setName("filler3"); // NOI18N
        jPanel3.add(filler3);

        filler6.setName("filler6"); // NOI18N
        jPanel3.add(filler6);

        lblTotal.setText("Total:");
        lblTotal.setName("lblTotal"); // NOI18N
        jPanel3.add(lblTotal);

        filler4.setName("filler4"); // NOI18N
        jPanel3.add(filler4);

        filler7.setName("filler7"); // NOI18N
        jPanel3.add(filler7);

        lblPago.setText("Pago:");
        lblPago.setName("lblPago");
        lblPago.setVisible(egreso);
        jPanel3.add(lblPago);

        filler5.setName("filler5"); // NOI18N
        jPanel3.add(filler5);

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addGap(12, 12, 12)
                        .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 333, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGroup(layout.createSequentialGroup()
                        .addGap(10, 10, 10)
                        .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, 120, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addGap(20, 20, 20)
                        .addComponent(jPanel3, javax.swing.GroupLayout.PREFERRED_SIZE, 80, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addGap(0, 0, 0)
                        .addComponent(jPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, 110, javax.swing.GroupLayout.PREFERRED_SIZE)))
                .addContainerGap(14, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(17, 17, 17)
                .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 176, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(7, 7, 7)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, 130, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jPanel3, javax.swing.GroupLayout.PREFERRED_SIZE, 130, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, 130, javax.swing.GroupLayout.PREFERRED_SIZE)))
        );

        pack();
    }

    // Code for dispatching events from components to event handlers.

    private class FormListener implements java.awt.event.ActionListener, java.awt.event.ItemListener, java.awt.event.MouseListener {
        FormListener() {}
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            if (evt.getSource() == productos) {
                RegistrarMercaderia.this.productosActionPerformed(evt);
            }
        }

        public void itemStateChanged(java.awt.event.ItemEvent evt) {
            if (evt.getSource() == chbCredito) {
                RegistrarMercaderia.this.chbCreditoItemStateChanged(evt);
            }
            else if (evt.getSource() == productos) {
                RegistrarMercaderia.this.productosItemStateChanged(evt);
            }
        }

        public void mouseClicked(java.awt.event.MouseEvent evt) {
            if (evt.getSource() == btnAgregar) {
                RegistrarMercaderia.this.btnAgregarMouseClicked(evt);
            }
            else if (evt.getSource() == btnEliminar) {
                RegistrarMercaderia.this.btnEliminarMouseClicked(evt);
            }
            else if (evt.getSource() == btnRegistrar) {
                RegistrarMercaderia.this.btnRegistrarMouseClicked(evt);
            }
            else if (evt.getSource() == btnCancelar) {
                RegistrarMercaderia.this.btnCancelarMouseClicked(evt);
            }
        }

        public void mouseEntered(java.awt.event.MouseEvent evt) {
        }

        public void mouseExited(java.awt.event.MouseEvent evt) {
        }

        public void mousePressed(java.awt.event.MouseEvent evt) {
        }

        public void mouseReleased(java.awt.event.MouseEvent evt) {
        }
    }// </editor-fold>//GEN-END:initComponents

    @Override
    public void dispose() {
        parent.setVisible(true);
        setVisible(false);
        super.dispose();
    }

    private void calcularValores() {
        double subtotal = 0;
        java.text.DecimalFormat frm = new java.text.DecimalFormat("#0.00");
        int fila = tabVentas.getRowCount();
        if (fila > 0) {
            for (int f = 0; f < fila; f++) {
                String tmp = (String) tabla.getValueAt(f, 1);
                if (tmp != null || !tmp.isEmpty()) {
                    int cantidad = (int) tabla.getValueAt(f, 0);
                    double precio = (double) tabla.getValueAt(f, 2);
                    subtotal += (double) cantidad * precio;
                }
                if (tmp.equals("Promoción") || tmp.equals("Descuento")) {
                    double precio = (double) tabla.getValueAt(f, 2);
                    subtotal -= precio;
                }
            }
            double iva = contable.aplicacion.contabilidad.inventario.Inventarios.calcularIva(subtotal);
            double total = subtotal + iva;
            txtSubtotal.setText(frm.format(subtotal));
            txtIVA.setText(frm.format(iva));
            txtTotal.setText(frm.format(total));
        }
    }

    private void btnAgregarMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_btnAgregarMouseClicked
        tabla.addRow(new Object[]{0, "", 0.00});
    }//GEN-LAST:event_btnAgregarMouseClicked

    private void btnEliminarMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_btnEliminarMouseClicked
        int fila = tabVentas.getSelectedRow() >= 0 ? tabVentas.getSelectedRow() : tabla.getRowCount() - 1;
        if (tabla.getRowCount() > 0) {
            tabla.removeRow(fila);
            calcularValores();
        }
        if (tabla.getRowCount() == 0) {
            txtSubtotal.setText("0.00");
            txtIVA.setText("0.00");
            txtTotal.setText("0.00");
        }
    }//GEN-LAST:event_btnEliminarMouseClicked

    private void btnCancelarMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_btnCancelarMouseClicked
        if (JOptionPane.showConfirmDialog(this, "¿Desea salir sin registrar una " + (egreso ? "venta" : "compra") + '?', "Confimar salir", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE) == JOptionPane.YES_OPTION) {
            dispose();
        }
    }//GEN-LAST:event_btnCancelarMouseClicked

    private void btnRegistrarMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_btnRegistrarMouseClicked
        int fila = tabVentas.getRowCount();
        boolean registro = true;
        java.text.DecimalFormat doble = new java.text.DecimalFormat("#0.00");
        if (fila > 0) {
            calcularValores();
            if (chbCredito.isSelected()) {
                if (egreso) {
                    venta = new VentasCredito();
                } else {
                    compra = new ComprasCredito();
                }
            } else {
                if (egreso) {
                    venta = new VentasContado();
                } else {
                    compra = new ComprasContado();
                }
                double total = Double.parseDouble(txtTotal.getText());
                if (egreso) {
                    double pago = Double.parseDouble(ftfPago.getText().isEmpty() ? "0.00" : ftfPago.getText());
                    if (pago < total) {
                        registro = false;
                        JOptionPane.showMessageDialog(this, "El pago es insuficiente para cancelar el total de la venta", "Pago insuficiente", JOptionPane.INFORMATION_MESSAGE);
                    } else {
                        JOptionPane.showMessageDialog(this, "El cambio es de " + new java.text.DecimalFormat("¤#,##0.00").format(pago - total), "Cambio de la venta", JOptionPane.INFORMATION_MESSAGE);
                    }
                } else {
                    Cuenta caja = new Cuenta();
                    fsql.rollback(caja, "111-000-000-000");
                    caja.saldar();
                    if (caja.getDebe() < total) {
                        registro = false;
                        JOptionPane.showMessageDialog(this, "El saldo en caja es insuficiente para pagar el total", "Efectivo insuficiente", JOptionPane.INFORMATION_MESSAGE);
                    }
                }
            }
            for (int f = 0; f < fila; f++) {
                String aux = (String) tabla.getValueAt(f, 1);
                if (aux == null || aux.isEmpty()) {
                    JOptionPane.showMessageDialog(this, "Escoja el producto en el detalle de venta " + f + 1, "Ecoger producto", JOptionPane.WARNING_MESSAGE);
                    registro = false;
                } else if (registro) {
                    Inventario prod = new Inventario();
                    int q = (int) tabla.getValueAt(f, 0);
                    double pu = Double.parseDouble(doble.format(tabla.getValueAt(f, 2)));
                    if (aux.equals("Papel fotográfico")) {
                        compra.papelFotografico(q, pu);
                    }
                    if (aux.equals("Tintas")) {
                        compra.tinta(q, pu);
                    }
                    if (aux.equals("Empaque")) {
                        compra.empaque(q, pu);
                    }
                    if (aux.equals("Fotografía")) {
                        if (egreso) {
                            venta.fotografia(q, pu); // FIXME revizar la venta de fotografias
                        }
                    }
                    if (aux.equals("Cámara")) {
                        if (egreso) {
                            fsql.rollback(prod, 4);
                            if (prod.getCantidad() >= q) {
                                venta.camara(q, pu);
                            } else {
                                JOptionPane.showMessageDialog(this, "La cantidad de cámaras disponibles es " + prod.getCantidad(), "Producto disponible", JOptionPane.ERROR_MESSAGE);
                                registro = false;
                            }
                        } else {
                            compra.camara(q, pu);
                        }
                    }
                    if (aux.equals("Memoría USB 2Gb")) {
                        if (egreso) {
                            fsql.rollback(prod, 5);
                            if (prod.getCantidad() >= q) {
                                venta.memoriaUSB2(q, pu);
                            } else {
                                JOptionPane.showMessageDialog(this, "La cantidad de memorias USB de 2Gb disponibles es " + prod.getCantidad(), "Producto disponible", JOptionPane.ERROR_MESSAGE);
                                registro = false;
                            }
                        } else {
                            compra.memoriaUSB2(q, pu);
                        }
                    }
                    if (aux.equals("Memoría USB 4Gb")) {
                        if (egreso) {
                            fsql.rollback(prod, 6);
                            if (prod.getCantidad() >= q) {
                                venta.memoriaUSB4(q, pu);
                            } else {
                                JOptionPane.showMessageDialog(this, "La cantidad de memorias USB de 4Gb disponibles es " + prod.getCantidad(), "Producto disponible", JOptionPane.ERROR_MESSAGE);
                                registro = false;
                            }
                        } else {
                            compra.memoriaUSB4(q, pu);
                        }
                    }
                    if (aux.equals("Memoría USB 8Gb")) {
                        if (egreso) {
                            fsql.rollback(prod, 7);
                            if (prod.getCantidad() >= q) {
                                venta.memoriaUSB8(q, pu);
                            } else {
                                JOptionPane.showMessageDialog(this, "La cantidad de memorias USB de 8 Gb disponibles es " + prod.getCantidad(), "Producto disponible", JOptionPane.ERROR_MESSAGE);
                                registro = false;
                            }
                        } else {
                            compra.memoriaUSB8(q, pu);
                        }
                    }
                    if (aux.equals("Memoría USB 16Gb")) {
                        if (egreso) {
                            fsql.rollback(prod, 8);
                            if (prod.getCantidad() >= q) {
                                venta.memoriaUSB16(q, pu);
                            } else {
                                JOptionPane.showMessageDialog(this, "La cantidad de memorias USB de 16Gb disponibles es " + prod.getCantidad(), "Producto disponible", JOptionPane.ERROR_MESSAGE);
                                registro = false;
                            }
                        } else {
                            compra.memoriaUSB16(q, pu);
                        }
                    }
                    if (aux.equals("Estuche para cámara")) {
                        if (egreso) {
                            fsql.rollback(prod, 9);
                            if (prod.getCantidad() >= q) {
                                venta.estucheCamara(q, pu);
                            } else {
                                JOptionPane.showMessageDialog(this, "La cantidad de estuches disponibles es " + prod.getCantidad(), "Producto disponible", JOptionPane.ERROR_MESSAGE);
                                registro = false;
                            }
                        } else {
                            compra.estucheCamara(q, pu);
                        }
                    }
                    if (aux.equals("Marco para fotografía")) {
                        if (egreso) {
                            fsql.rollback(prod, 10);
                            if (prod.getCantidad() >= q) {
                                venta.marcoFotografia(q, pu);
                            } else {
                                JOptionPane.showMessageDialog(this, "La cantidad de marcos disponibles es " + prod.getCantidad(), "Producto disponible", JOptionPane.ERROR_MESSAGE);
                                registro = false;
                            }
                        } else {
                            compra.marcoFotografia(q, pu);
                        }
                    }
                    if (aux.equals("Artículos de escritorio")) {
                        compra.articulosEscritorio((double) q * pu);
                    }
                    if (aux.equals("Muebles y equipo de oficina")) {
                        compra.muebleEquipoOficina((double) q * pu);
                    }
                    if (aux.equals("Muebles y equipo de ventas")) {
                        compra.muebleEquipoVentas((double) q * pu);
                    }
                    if (aux.equals("Repuestos y accesorios")) {
                        compra.repuestosAccesorios((double) q * pu);
                    }
                    if (aux.equals("Flete")) {
                        compra.flete(pu);
                    }
                    if (aux.equals("Promoción")) {
                        venta.promocion(pu);
                    }
                    if (aux.equals("Descuento")) {
                        venta.descuentos(pu);
                    }
                }
            }
        } else {
            JOptionPane.showMessageDialog(this, "Agregue los detalles de la venta antes de registrar", "Agregar detalles", JOptionPane.WARNING_MESSAGE);
            registro = false;
        }
        if (registro) {
            dispose();
        }
    }//GEN-LAST:event_btnRegistrarMouseClicked

    private void productosItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_productosItemStateChanged
        if (egreso) {
            int fila = tabVentas.getSelectedRow() < 0 ? tabVentas.getRowCount() - 1 : tabVentas.getSelectedRow();
            Inventario prod = new Inventario();
            fsql.rollback(prod, productos.getSelectedIndex() + 3);
            tabla.setValueAt(prod.getPrecio(), fila, 2);
        }
        calcularValores();
    }//GEN-LAST:event_productosItemStateChanged

    private void chbCreditoItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_chbCreditoItemStateChanged
        if (chbCredito.isSelected()) {
            if (egreso) {
                venta = new VentasCredito();
            } else {
                compra = new ComprasCredito();
            }
            setTitle("Registrar " + (egreso ? "venta" : "compra") + " al credito");
            ftfPago.setEnabled(false);
        } else {
            if (egreso) {
                venta = new VentasContado();
            } else {
                compra = new ComprasContado();
            }
            setTitle("Registrar " + (egreso ? "venta" : "compra") + " al contado");
            ftfPago.setEnabled(true);
        }
    }//GEN-LAST:event_chbCreditoItemStateChanged

    private void productosActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_productosActionPerformed
        int fila = tabVentas.getSelectedRow() < 0 ? tabVentas.getRowCount() - 1 : tabVentas.getSelectedRow();
        int p = productos.getSelectedIndex();
        if (p < 0) {
            Inventario prod = new Inventario();
            fsql.rollback(prod, p + 3);
            tabla.setValueAt(prod.getPrecio(), fila, 2);
        }
        calcularValores();
    }//GEN-LAST:event_productosActionPerformed
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton btnAgregar;
    private javax.swing.JButton btnCancelar;
    private javax.swing.JButton btnEliminar;
    private javax.swing.JButton btnRegistrar;
    private javax.swing.JCheckBox chbCredito;
    private javax.swing.Box.Filler filler1;
    private javax.swing.Box.Filler filler2;
    private javax.swing.Box.Filler filler3;
    private javax.swing.Box.Filler filler4;
    private javax.swing.Box.Filler filler5;
    private javax.swing.Box.Filler filler6;
    private javax.swing.Box.Filler filler7;
    private javax.swing.JFormattedTextField ftfPago;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JPanel jPanel2;
    private javax.swing.JPanel jPanel3;
    private javax.swing.JScrollPane jScrollPane2;
    private javax.swing.JLabel lblIVA;
    private javax.swing.JLabel lblPago;
    private javax.swing.JLabel lblSubtotal;
    private javax.swing.JLabel lblTotal;
    private javax.swing.JComboBox productos;
    private org.jdesktop.swingx.JXTable tabVentas;
    private javax.swing.JTextField txtIVA;
    private javax.swing.JTextField txtSubtotal;
    private javax.swing.JTextField txtTotal;
    // End of variables declaration//GEN-END:variables
}
